package hep.aida.tfloat;

/**
 * A common base interface for IHistogram1D, IHistogram2D and IHistogram3D.
 * 
 * @author Pavel Binko, Dino Ferrero Merlino, Wolfgang Hoschek, Tony Johnson,
 *         Andreas Pfeiffer, and others.
 * @version 1.0, 23/03/2000
 */
public interface FloatIHistogram extends java.io.Serializable {
    /**
     * Constant specifying the overflow bin (can be passed to any method
     * expecting a bin number).
     */
    public final static int OVERFLOW = -1;

    /**
     * Constant specifying the underflow bin (can be passed to any method
     * expecting a bin number).
     */
    public final static int UNDERFLOW = -2;

    static final long serialVersionUID = 1020;

    /**
     * Number of all entries in all (both in-range and under/overflow) bins in
     * the histogram.
     */
    public int allEntries();

    /**
     * Returns 1 for one-dimensional histograms, 2 for two-dimensional
     * histograms, and so on.
     */
    public int dimensions();

    /**
     * Number of in-range entries in the histogram.
     */
    public int entries();

    /**
     * Number of equivalent entries.
     * 
     * @return <tt>SUM[ weight ] ^ 2 / SUM[ weight^2 ]</tt>.
     */
    public float equivalentBinEntries();

    /**
     * Number of under and overflow entries in the histogram.
     */
    public int extraEntries();

    /**
     * Reset contents; as if just constructed.
     */
    public void reset();

    /**
     * Sum of all (both in-range and under/overflow) bin heights in the
     * histogram.
     */
    public float sumAllBinHeights();

    /**
     * Sum of in-range bin heights in the histogram.
     */
    public float sumBinHeights();

    /**
     * Sum of under/overflow bin heights in the histogram.
     */
    public float sumExtraBinHeights();

    /**
     * Title of the histogram (will be set only in the constructor).
     */
    public String title();
}
